1 using System.Collections;
2 using System.Collections.Generic;
3 using UnityEngine;
4 using System;
5
6 public enum PieceType {
7 NONE,
8 CIRCLE,
9 TRIANGLE,
10 SQUARE,
11 HEXAGON,
12 CROSS,
13 RECTANGLE, //Sample
14 }
15
16 public class Piece : Movable, IClickable {
17
18 [SerializeField]
19 private PieceType pieceType;
20 [SerializeField]
21 private Node node;
22 [SerializeField]
23 private MovementType movementType;
24
25 private IPieceMovement pieceMovement;
26 private bool dropping;
27
28 private List<Node> possibleMoves;
29 private List<Node> possibleEats;
30
31 public IPieceMovement PieceMovement {
32 get {return pieceMovement;}
33 set {
34 pieceMovement = value;
35 }
36 }
37
38 /*
39 private Piece check;
40
41 public bool Checking {
42 get {return check != null;}
43 }
44
45 public Piece Check {
46 get {return check;}
47 set {check = value;}
48 }
49 */
50
51 public bool IsMoved {
52 get {
53 if (pieceMovement != null) {
54 return pieceMovement.IsMoved();
55 }
56
57 return false;
58 }
59 }
60
61 public List<Node> PossibleMoves {
62 get { return possibleMoves;}
63 }
64
65 public List<Node> PossibleEats {
66 get {return possibleEats;}
67 }
68
69 public PieceType PieceType {
70 get {return pieceType;}
71 }
72
73 public MovementType MovementType {
74 get {return movementType;}
75 }
76
77 void Awake() {
78 possibleEats = new List<Node>();
79 possibleMoves = new List<Node>();
80 }
81
82
83 protected override void Start() {
84 base.Start();
85 }
86
87 public void HighlightPossibleMoves() {
88 for (int i = 0; i < possibleMoves.Count; i++) {
89 possibleMoves[i].HighlightMove();
90 }
91 }
92
93 public void UnHighlightPossibleMoves() {
94 for (int i = 0; i < possibleMoves.Count; i++) {
95 possibleMoves[i].UnhighlightMove();
96 }
97 }
98
99 public void HighlightPossibleEats() {
100 for (int i = 0; i < possibleEats.Count; i++) {
101 possibleEats[i].HighlightEat();
102 }
103 }
104
105 public void UnHighlightPossibleEats() {
106 for (int i = 0; i < possibleEats.Count; i++) {
107 possibleEats[i].UnhighlightEat();
108 }
109 }
110
111 public bool IsPossibleMove(Node node) {
112 return this.possibleMoves.Contains(node);
113 }
114
115 public bool IsPossibleEat(Node node) {
116 return this.possibleEats.Contains(node);
117 }
118
119 public void AddPossibleMoves(params Node[] nodes) {
120 for (int i = 0; i < nodes.Length; i++) {
121 this.possibleMoves.Add(nodes[i]);
122 }
123 }
124
125 public void AddPossibleEats(params Node[] nodes) {
126 for (int i = 0; i < nodes.Length; i++) {
127 this.possibleEats.Add(nodes[i]);
128 }
129 }
130
131 public void ClearPossibleMoves() {
132 while (possibleMoves.Count > 0) {
133 Node node = possibleMoves[0];
134 possibleMoves.Remove(node);
135 }
136 }
137
138 public void ClearPossibleEats() {
139 while (possibleEats.Count > 0) {
140 Node node = possibleEats[0];
141 possibleEats.Remove(node);
142 }
143 }
144
145 /*
146 public void ClearCheck(GCPlayer player) {
147 if (node != null) {
148 node.UnhighlightCheck();
149 }
150 if (check != null) {
151 check.Node.UnhighlightCheck();
152 check = null;
153 }
154 if (player != null) {
155 player.CheckedBy = null;
156 }
157 }
158 */
159
160 public void Compute() {
161 pieceMovement.Compute();
162 }
163
164 public override void MoveToXZ(Node node, Action finishCallback) {
165 base.MoveToXZ(node, finishCallback);
166 pieceMovement.Moved();
167 }
168
169 public string ChessCoords {
170 get {
171 if (node == null) return null;
172
173 return node.ChessCoords;
174 }
175 }
176
177 public Node Node {
178 get {return node;}
179 }
180
181 public void UpdateNode(Node n) {
182 if (node != null) {
183 node.Clear();
184 }
185 node = n;
186 if (node != null) {
187 node.Piece = this;
188 }
189 }
190
191 public bool Inform<T>(T arg) {
192 //TODO
193 return true;
194 }
195
196 public void Highlight() {
197 SetEmission(GameManager.Instance.PieceHighlightColor);
198 }
199
200 public void ZeroGravity() {
201 gameObject.GetComponent<Rigidbody>().useGravity = false;
202 }
203
204 public void Pickup() {
205 Highlight();
206 ZeroGravity();
207 MoveBy(new Vector3(0,1,0), null);
208 }
209
210 public void Drop() {
211 dropping = true;
212 SetEmissionOriginal();
213 StopMoveCoroutine();
214 gameObject.GetComponent<Rigidbody>().useGravity = true;
215 //GCPlayer currPlayer = GameManager.Instance.CurrentPlayer;
216 UnHighlightPossibleEats();
217 UnHighlightPossibleMoves();
218 ready = false;
219 }
220
221 //EXPERIMENT
222 void OnCollisionEnter(Collision collision) {
223 if (dropping && collision.collider.gameObject) {
224 ready = true;
225 dropping = false;
226 }
227 }
228
229 }
RECTANGLE, Sample
TODO
GCPlayer currPlayer = GameManager.Instance.CurrentPlayer;
EXPERIMENT